// 导入 Sequelize 的数据类型模块，用于定义模型字段类型
const { DataTypes } = require("sequelize");
// 导入数据库连接实例（已配置好的 Sequelize 连接）
const sequelize = require("../config/db");

// 定义 TargetTemplate 模型（对应数据库中的 target_template 表）
const TargetTemplate = sequelize.define(
  "TargetTemplate", // Sequelize 内部模型名（大写开头,约定俗成）
  {
    targetTemplateId: {
      type: DataTypes.INTEGER, // 整数类型
      primaryKey: true, // 设为主键
      autoIncrement: true, // 自动递增
      allowNull: false, // 非空
      field: "target_template_id", // 映射数据库中的字段名(下划线命名)
      comment: "指标模板 ID，主键", // 字段注释
    },
    gaugingPointTemplateId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      field: "gauging_point_template_id",
      comment: "关联测点模板 ID",
    },
    operatingConditionTemplateId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      field: "operating_condition_template_id",
      comment: "关联工况模板 ID",
    },
    name: {
      type: DataTypes.STRING(100), // 字符串类型，最大长度 100
      allowNull: false,
      comment: "指标名称",
    },
    code: {
      type: DataTypes.STRING(50), // 字符串类型，最大长度 50
      allowNull: false,
      comment: "指标简称",
    },
    unit: {
      type: DataTypes.STRING(20), // 字符串类型，最大长度 20
      allowNull: false,
      comment: "指标单位",
    },
    leastValue: {
      type: DataTypes.DECIMAL(10, 2), // 十进制数值类型，最多 10 位，其中小数点后 2 位
      allowNull: false,
      field: "least_value",
      comment: "指标最小值",
    },
    one: {
      type: DataTypes.DECIMAL(10, 2),
      allowNull: false,
      comment: "一级报警值",
    },
    two: {
      type: DataTypes.DECIMAL(10, 2),
      allowNull: false,
      comment: "二级报警值",
    },
    three: {
      type: DataTypes.DECIMAL(10, 2),
      allowNull: false,
      comment: "三级报警值",
    },
    enableStatus: {
      type: DataTypes.TINYINT, // tinyint 类型（1字节整数，范围-128~127）
      allowNull: false,
      defaultValue: 0, // 默认值为0（不启用）
      field: "enable_status",
      comment: "启用状态（0：不启用，1：启用）",
    },
    type: {
      type: DataTypes.TINYINT,
      allowNull: false,
      comment:
        "指标类型（1:高频冲击脉冲,2:中频冲击脉冲,3:低频冲击脉冲,4:振动烈度,5:振动位移峰峰值,6:加速度峰值,7:基础信息）",
    },
  },
  {
    tableName: "target_template", // 显式指定数据库表名（小写,与表名一致）
    freezeTableName: true, // 禁止 Sequelize 自动将表名复数化
    timestamps: false, // 不自动生成 createdAt 和 updatedAt 字段
    comment: "指标模板表",
    // 定义表索引(优化查询性能)
    indexes: [
      {
        unique: true, // 唯一索引，确保组合字段值不重复
        fields: [
          "gauging_point_template_id",
          "operating_condition_template_id",
          "code",
        ],
        name: "uk_tpt_gpt_oct",
        // 业务意义：同一测点模板、同一工况模板下，指标代码不能重复
      },
      {
        fields: ["operating_condition_template_id"],
        name: "fk_tpt_oct_id",
        // 用途：优化关联查询工况模板的场景
      },
    ],
  }
);

// 导出模型供其他模块使用
module.exports = TargetTemplate;
